1 module hip.loaders.text; 2 import hip.filesystem.hipfs; 3 import hip.asset_manager.load_task; 4 import hip.assetmanager; 5 import hip.api.data.commons; 6 7 abstract class HipTextLoadTask : HipAssetLoadTask 8 { 9 abstract string getWorkerName() const; 10 protected abstract HipAsset loadAsset(in ubyte[] data); 11 this(string path, string name, HipAsset asset, const(ubyte)[] extraData, string fileRequesting, size_t lineRequesting) 12 { 13 super(path,name,asset,extraData,fileRequesting,lineRequesting); 14 } 15 16 override void update() 17 { 18 final switch(result) with (HipAssetResult) 19 { 20 case waiting: 21 result = loading; 22 worker = HipAssetManager.loadWorker(getWorkerName(), () 23 { 24 HipFS.read(path) 25 .addOnError((string error){ result = cantLoad; this.error = error; }) 26 .addOnSuccess((in ubyte[] data) 27 { 28 asset = loadAsset(data); 29 result = loaded; 30 return FileReadResult.keep; 31 }); 32 }); 33 break; 34 case loading, mainThreadLoading: 35 break; 36 case loaded: break; 37 case cantLoad: break; 38 } 39 } 40 41 } 42 43 final class HipFileLoadTask : HipTextLoadTask 44 { 45 this(string path, string name, HipAsset asset, const(ubyte)[] extraData, string fileRequesting, size_t lineRequesting) 46 { 47 super(path,name,asset,extraData,fileRequesting,lineRequesting); 48 } 49 override string getWorkerName() const{ return "Load File"; } 50 override protected HipAsset loadAsset(in ubyte[] data) 51 { 52 HipFileAsset ret = new HipFileAsset(path); 53 ret.load(data); 54 return ret; 55 } 56 } 57 58 final class HipINILoadTask : HipTextLoadTask 59 { 60 this(string path, string name, HipAsset asset, const(ubyte)[] extraData, string fileRequesting, size_t lineRequesting) 61 { 62 super(path,name,asset,extraData,fileRequesting,lineRequesting); 63 } 64 override string getWorkerName() const{ return "Load INI"; } 65 override protected HipAsset loadAsset(in ubyte[] data) 66 { 67 HipINI ret = new HipINI(); 68 ret.loadFromMemory(cast(string)data, path); 69 return ret; 70 } 71 } 72 73 final class HipCSVLoadTask : HipTextLoadTask 74 { 75 this(string path, string name, HipAsset asset, const(ubyte)[] extraData, string fileRequesting, size_t lineRequesting) 76 { 77 super(path,name,asset,extraData,fileRequesting,lineRequesting); 78 } 79 override string getWorkerName() const{ return "Load CSV"; } 80 override protected HipAsset loadAsset(in ubyte[] data) 81 { 82 HipCSV ret = new HipCSV(); 83 ret.loadFromMemory(cast(string)data, ',', '"', path); 84 return ret; 85 } 86 } 87 88 final class HipJSONCLoadTask : HipTextLoadTask 89 { 90 this(string path, string name, HipAsset asset, const(ubyte)[] extraData, string fileRequesting, size_t lineRequesting) 91 { 92 super(path,name,asset,extraData,fileRequesting,lineRequesting); 93 } 94 override string getWorkerName() const{ return "Load JSONC"; } 95 override protected HipAsset loadAsset(in ubyte[] data) 96 { 97 HipJSONC ret = new HipJSONC(); 98 ret.loadFromMemory(cast(string)data, path); 99 return ret; 100 } 101 } 102 103 final class HipInputMapLoadTask : HipTextLoadTask 104 { 105 this(string path, string name, HipAsset asset, const(ubyte)[] extraData, string fileRequesting, size_t lineRequesting) 106 { 107 super(path,name,asset,extraData,fileRequesting,lineRequesting); 108 } 109 override string getWorkerName() const{ return "Load InputMap"; } 110 override protected HipAsset loadAsset(in ubyte[] data) 111 { 112 import hip.assets.inputmap; 113 return cast(HipAsset)HipInputMap.parseInputMap(data, path); 114 } 115 }